'use strict';
import semver from 'semver';
import colors from 'colors';
import log  from '@breeze-cli-dev/log';
const LOWEST_NODE_VERSION = '16.0.0';
class Command {
  constructor(argv) {
    if (!argv) {
      throw new Error('Command类参数不能为空');
    }
    if (!Array.isArray(argv)) {
      throw new Error('Command类参数必须为数组');
    }
    if (argv.length < 1) {
      throw new Error('Command类参数列表不能为空');
    }
    this._argv = argv;
    let runner = new Promise((resolve, reject) => {
      let chain = Promise.resolve();
      chain = chain.then(() => this.checkNodeVersion());
      chain = chain.then(() => this.initArgs());
      chain = chain.then(() => this.init());
      chain = chain.then(() => this.exec());
      chain.catch((err) => {
        log.error(err.message);
      })
    });
    console.log('Command constructor');
  }
  initArgs() {
    this.cdm = this._argv[this._argv.length - 1];
    this._argv = this._argv.slice(0, this._argv.length - 1);
    // console.log('this.cdm', this.cdm);
  }
  init() {
    throw new Error('init方法必须实现');
  }
  exec() {
    throw new Error('exec方法必须实现');
  }
  checkNodeVersion() {
    const currentVersion = process.version;
    // console.log('node版本号：', currentVersion);
    const lowestVersion = LOWEST_NODE_VERSION;
    if (!semver.gte(currentVersion, lowestVersion)) {
      throw new Error(colors.red(`breeze-cli 需要安装 v${lowestVersion} 以上版本的 Node.js`));
    }
  }
}
export default Command;

